/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package py.gestionpymes.compra.servicios;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import py.gestionpymes.compra.persistencia.enums.EstadoFacturaProveedor;
import py.gestionpymes.compra.persistencia.FacturaProveedor;
import py.gestionpymes.compra.persistencia.eventos.factura.EventoFP;
import py.gestionpymes.compra.persistencia.eventos.factura.EventoFPConformacion;
import py.gestionpymes.utils.servicios.AbstractDAO;
import py.gestionpymes.compra.persistencia.eventos.factura.EventoFPCreacion;
import py.gestionpymes.utils.servicios.ABMService;

/**
 *
 * @author christian
 */
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class FacturaProveedorService extends AbstractDAO<FacturaProveedor> {
    
    @Inject
    private Event<EventoFPCreacion> eventoCrecion;
    @Inject
    private Event<EventoFP> eventoConformacion;
    @EJB
    private ABMService abmService;
    
    @Override
    public FacturaProveedor create(FacturaProveedor entity) {
        abmService.create(entity);
        eventoCrecion.fire(new EventoFPCreacion(entity));
        return entity;
    }
    
    @Override
    public FacturaProveedor edit(FacturaProveedor entity) {
        return abmService.update(entity);
    }
    
    @Override
    public void remove(FacturaProveedor entity) {
        abmService.delete(entity);
    }
    
    @Override
    public FacturaProveedor find(Object id) {
        return abmService.find(id, FacturaProveedor.class);
    }
    
    @Override
    public List<FacturaProveedor> findAll() {
        return abmService.findByNamedQuery(FacturaProveedor.TODOS);
    }
    
    public FacturaProveedor conforma(FacturaProveedor entity) {
        eventoConformacion.fire(new EventoFPConformacion(entity,entity.getEstado()));
        
        
        entity.setEstado(EstadoFacturaProveedor.CONFORMADA);
        edit(entity);
        
        return entity;
    }
}
